package org.linotte.imprimeur;

import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import org.linotte.frame.Atelier;
import org.linotte.frame.latoile.JPanelLaToile;
import org.linotte.frame.latoile.LaToile;
import org.linotte.greffons.externe.Greffon;
import org.linotte.greffons.externe.Greffon.DocumentationHTML;

@DocumentationHTML("" + "Le greffon <i>Imprimeur</i> est une espèce offrant la possibilité d'imprimer la toile.<br>" + "<u>Les méthodes fonctionnelles proposées par l'espèce Imprimeur sont:</u><br>"
		+ "<ul>" + "<li>tweak.imprimertoile() : Imprime la toile</li>" + "</ul>")
public class Imprimeur extends Greffon {

	@Slot(nom = "imprimertoile")
	public boolean imprimerToile() throws GreffonException {
		try {
			LaToile toile = Atelier.linotte.getLibrairie().getToile();
			JPanelLaToile panel = toile.getPanelLaToile();
			ImprimeurToile imprimeurToile = new ImprimeurToile(panel.getImage());

			//			final HashPrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
			//			attrs.add(OrientationRequested.PORTRAIT);
			//			attrs.add(Chromaticity.COLOR);
			//			attrs.add(Chromaticity.MONOCHROME);
			//			attrs.add(PrintQuality.NORMAL);
			//			attrs.add(PrintQuality.DRAFT);
			//			attrs.add(PrintQuality.HIGH);

			PrinterJob job = PrinterJob.getPrinterJob();

			//			PageFormat page = job.getPageFormat(null);
			//			Paper papier = new Paper();
			//			papier.setSize(595, 842); // format A4
			//			papier.setImageableArea(10, 10, papier.getWidth()-20, papier.getHeight()-20); // marge de 10 points de par et d'autre de la zone d'impression
			//			page.setPaper(papier);

			job.setPrintable(imprimeurToile);
			boolean doPrint = job.printDialog();
			if (doPrint) {
				try {
					job.print();
				} catch (PrinterException e) {
					e.printStackTrace();
					return false;
				}
				return true;
			}
			return false;
		} catch (Exception e) {
			throw new GreffonException("Impossible d'imprimer la toile");
		}
	}
}
